#include<iostream>
#include <unistd.h>
#include<vector>
#include<functional>
#include<signal.h>
#include<stdlib.h>
#include<string>


void hand(int sig)
{
    std::cout << "sig:" << sig << std::endl;
    //我捕捉了11号信号，没执行默认动作哦 , 也没有退出进程哦！
    
}

int main()
{
    //signal(8,hand);
    int a = 10;
    a /= 0;
 
    //  int *p = nullptr;
    //  *p=100;
    while(true);
    //return 0;
}



// int gnum = 0;
// using func_t = std::function<void()>;
// std::vector<func_t> gfunc;
// //把信号 更换 成为 硬件中断，这就是操作系统的运行原理
// void hand(int sig)
// {
//     for(auto& i:gfunc)
//     {
//         i();
//     }
//     std::cout << "gnum:" << gnum << std::endl;
//     alarm(1);
// }

// int main()
// {
//     gfunc.push_back([]()
//     {std::cout << "我是一个内核刷新操作" << std::endl;});
//     gfunc.push_back([]()
//     {std::cout << "我是一个检测进程时间片的操作，时间片到了，我会切换进程" << std::endl;}); 
//     gfunc.push_back([]()
//     {std::cout << "我是一个内存管理操作，定期清理操作系统内部的内存碎片" << std::endl;});
//     alarm(1);
//     signal(SIGALRM,hand);
//     //操作系统就是一个死循环-操作系统应该叫中断程序
//     while(true)
//     {
//         pause();
//         std::cout << "我醒来了...." << std::endl;
//         gnum++;
//     }
// }


// void Hand(int sig)
// {
//     //当对应的信号被触发，内核会将对应的信号编号，传递给自定义方法
//     std::cout << "信号捕捉:"<< sig << std::endl;
// }

// void sage(std::string argv)
// {
//     std::cout << "这样用:" << argv << "信号量 进程ipd" << std::endl;
// }
// long long num = 0;
// void dir(int sig)
// {
//     printf("sig:%d  count:%lld\n",sig,num);
//     exit(0);
// }
// int main(int argc,char* argv[])
// {
//     // //统计我的服务器1秒可以将计数器累加多少！
//     alarm(3);//一秒后收到14号信号SIGALRM
//     sleep(1);
//     int n = alarm(0);//0表示取消闹钟

//     std::cout << "n:" << n << std::endl;

//     // signal(SIGALRM,dir);
    
//     // while(true)
//     // {
//     //     num++;
//     // }

//     // int cnt = 5;
//     // while(true)
//     // {
//     //     std::cout << "循环中" << std::endl;
//     //     cnt--;
//     //     if(cnt <= 0)
//     //     {
//     //         raise(9);
//     //     }
//     //     sleep(1);
//     // }

//     // //个数不等于3，打印使用手册
//     // if(argc != 3)
//     // {
//     //     sage(argv[0]);
//     //     exit(1);
//     // }
//     // //获取用户输入的信号
//     // int num = std::stoi(argv[1]);
//     // //获取用户输入的进程ipd
//     // pid_t id = std::stoi(argv[2]);
//     // //利用kill系统调用
//     // int n = kill(id,num);
//     // if(n < 0)
//     // {
//     //     perror("kill");
//     //     exit(2);
//     // }
//     // exit(0);


//     // for(int i = 1;i <=31 ;i++)
//     // {
//     //     signal(i,Hand);//默认终止改成执行自定义方法
//     //     std::cout << "signal:" << i << std::endl;
//     // }

//     // while(true)
//     // {
//     //     std::cout << "hello bit" << std::endl;
//     //     sleep(1);
//     // }

//     return 0;
// }